#include "stdafx.h"
#include "YuvConverter.h"
#include <libyuv/convert.h>
#include <libyuv/convert_from.h>

YuvConverter::YuvConverter()
{
}


YuvConverter::~YuvConverter()
{
}

int YuvConverter::I420ToRGB24(
	const unsigned char* src_y, int src_stride_y,
	const unsigned char* src_u, int src_stride_u,
	const unsigned char* src_v, int src_stride_v,
	unsigned char* dst_buf, int dst_stride, int w, int h, YUV_FMT fmt/* = YV12*/) {

	if (fmt == YU12)
		return libyuv::I420ToRGB24(src_y, src_stride_y, src_u, src_stride_u, src_v, src_stride_v, dst_buf, dst_stride, w, h);
	else if (fmt == YV12)
		return libyuv::I420ToRGB24(src_y, src_stride_y, src_v, src_stride_v, src_u, src_stride_u, dst_buf, dst_stride, w, h);

	return -1;
}

int YuvConverter::I420ToRGBA(
	const uint8_t* src_y, int src_stride_y,
	const uint8_t* src_u, int src_stride_u,
	const uint8_t* src_v, int src_stride_v,
	uint8_t* dst_buf, int dst_stride, int w, int h, YUV_FMT fmt/* = YV12*/) {

	if (fmt == YU12)
		return libyuv::I420ToRGBA(src_y, src_stride_y, src_u, src_stride_u, src_v, src_stride_v, dst_buf, dst_stride, w, h);
	else if (fmt == YV12)
		return libyuv::I420ToRGBA(src_y, src_stride_y, src_v, src_stride_v, src_u, src_stride_u, dst_buf, dst_stride, w, h);

	return -1;
}

int YuvConverter::I420ToBGRA(
	const unsigned char* src_y, int src_stride_y,
	const unsigned char* src_u, int src_stride_u,
	const unsigned char* src_v, int src_stride_v,
	unsigned char* dst_buf, int dst_stride, int w, int h, YUV_FMT fmt/* = YV12*/) {

	if (fmt == YU12)
		return libyuv::I420ToBGRA(src_y, src_stride_y, src_u, src_stride_u, src_v, src_stride_v, dst_buf, dst_stride, w, h);
	else if (fmt == YV12)
		return libyuv::I420ToBGRA(src_y, src_stride_y, src_v, src_stride_v, src_u, src_stride_u, dst_buf, dst_stride, w, h);

	return -1;
}

int YuvConverter::RGB24ToI420(
	const uint8_t* src_buf, int src_stride,
	uint8_t* dst_y, int dst_stride_y,
	uint8_t* dst_u, int dst_stride_u,
	uint8_t* dst_v, int dst_stride_v,
	int w, int h) {

	return libyuv::RGB24ToI420(src_buf, src_stride, dst_y, dst_stride_y, dst_u, dst_stride_u, dst_v, dst_stride_v, w, h);
}